package cn.liujianbo.example.base.enum_utils;

/**
 * @author 刘建波
 * @date 2022-04-06 19:29
 */
public final class EnmuUtils {

    public static <T> boolean isExist(ValueEnum<T>[] enums, T value) {
        for (ValueEnum<T> e : enums) {
            if (e.getValue().equals(value)) {
                return true;
            }
        }
        return false;
    }

    @SuppressWarnings("unchecked")
    public static <E extends Enum<? extends ValueEnum<V>>, V> boolean isExist(Class<E> enumClass, V value) {
        for (Enum<? extends ValueEnum<V>> e : enumClass.getEnumConstants()) {
            if (((ValueEnum<V>) e).getValue().equals(value)) {
                return true;
            }
        }
        return false;
    }

    public static <T> String getNameByValue(NameValueEnum<T>[] enums, T value) {
        for (NameValueEnum<T> e : enums) {
            if (e.getValue().equals(value)) {
                return e.getName();
            }
        }
        return null;
    }

    @SuppressWarnings("unchecked")
    public static <E extends Enum<? extends ValueEnum<V>>, V> E getEnumByValue(E[] enums, V value) {
        for (E e : enums) {
            if (((ValueEnum<V>) e).getValue().equals(value)) {
                return e;
            }
        }
        return null;
    }

    public static <E extends Enum<? extends ValueEnum<V>>, V> E getEnumByValue(Class<E> enums, V value) {
        return getEnumByValue(enums.getEnumConstants(), value);
    }

}
